// Package db   mysql 连接
package db

import (
	"admin-go-api/common/config"
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

var Db *gorm.DB

// SetupDBLink 数据库初始化
func SetupDBLink() error {
	var err error
	// 获取config中初始化好的Db信息
	var dbConfig = config.Config.Db
	// 格式化mysql连接信息
	// dsn = username:passowrd@tcp(host:port)/Db?charset=utf8&parseTime=true&loc=Local
	url := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=true&loc=Local",
		dbConfig.Username,
		dbConfig.Password,
		dbConfig.Host,
		dbConfig.Port,
		dbConfig.Db,
		dbConfig.Charset)

	// gorm连接数据库
	Db, err = gorm.Open(mysql.Open(url), &gorm.Config{
		//  Logger 默认的GORM日志记录器
		// 设置日志的详细程度为 Info 级别  记录信息性日志、警告和错误日志（默认）。
		Logger: logger.Default.LogMode(logger.Info),
		// 在进行数据库迁移（如自动迁移 AutoMigrate）时，禁用外键约束检查,免在某些情况下由于外键约束导致的迁移失败
		DisableForeignKeyConstraintWhenMigrating: true,
	})
	if err != nil {
		panic(err)
	}
	if Db.Error != nil {
		panic(Db.Error)
	}

	sqlDB, err := Db.DB()
	//设置连接池最大空闲数和连接数
	sqlDB.SetMaxIdleConns(dbConfig.MaxIdle)
	sqlDB.SetMaxOpenConns(dbConfig.MaxOpen)
	return nil
}
